package day2;
import java.util.*;

public class Main3 {
    /**
     * dd爱科学1.0
     * https://ac.nowcoder.com/acm/problem/221822
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        char[] s = in.next().toCharArray();

        char[] dp = new char[n + 1]; // 表示长度为i的所有子序列中，最小的末尾值为多少
        int manLen = 0;

        // 使用 贪心 + 二分 ，不进行使用 动态规划——时间过长对于这个题
        // 贪心：不需要知道这个子序列长什么样子，只需要知道这个子序列末尾的值是什么即可
        // 每次存储都是进行比较末尾的值进行查看新来的值放到哪个位置
        for(int i = 0;i < n;i++) {
            char ch = s[i];
            if(manLen == 0 || ch >= dp[manLen]) {
                dp[++manLen] = ch;
            }else {
                // 使用二分查找进行快速找到要插入的位置
                int left = 1;
                int right = manLen;
                while(left < right) {
                    int mid = (left + right) / 2;
                    if(dp[mid] > ch) {
                        right = mid;
                    }else {
                        left = mid + 1;
                    }
                }
                dp[left] = ch;
            }
        }

        // 得到最长的非递减子序列之后，用总长减去，得到的就是要修改的长度
        System.out.println(n - manLen);
    }
}
